package com.winner.data.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.winner.data.entity.User;

import cn.hutool.core.util.StrUtil;

/**
 * lang3工具类和hutool工具类StrUtil implements StrPool,可以使用符号常量
 *
 * @author wangxinle5
 * @since 2023-01-03
 */
public class StringUtil {

    /**
     * 将字符串的中文空格 英文前后空格去掉
     *
     * @param s
     * @return
     */
    public static String trimAndUpper(String s) {
        if (StrUtil.isBlank(s)) {
            return null;
        } else {
            return StrUtil.trim(s).toUpperCase();
        }
    }

    /**
     * 替换sql中${paramName}变量
     *
     * @param sql sql
     * @param params map
     * @return 结果
     */
    public static String replaceParams(String sql, Map<String, String> params) {
        for (Map.Entry<String, String> entry : params.entrySet()) {
            String paramName = entry.getKey();
            String paramValue = entry.getValue();
            sql = sql.replace("${" + paramName + "}", paramValue);
        }
        return sql;
    }


    public static void main(String[] args) {
        String sql = "select * from table_name where START_DATE>=to_date('${beginDate}','yyyy-mm-dd') and END_DATE<to_date('${endDate}','yyyy-mm-dd')";
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("beginDate", "2024-01-01");
        hashMap.put("endDate", "2024-01-31");
        String replacedSql = replaceParams(sql, hashMap);
        System.out.println("Replaced SQL: " + replacedSql);

        // 常量字符 ""
        System.out.println(StrUtil.EMPTY);

        // 截取字符串前面7位
        String dateMonth = StrUtil.sub("2024-01-01", 0, 7);
        System.out.println(dateMonth);

        // 将逗号隔开的字符串, 分割成list    字符串为null "" 都返回 []
        List<String> split = StrUtil.split("1,2,2", StrUtil.COMMA);
        System.out.println(split);

        // 按次序取第N次出现字符串的脚标
        System.out.println(StrUtil.ordinalIndexOf("192.168.1.1", ".", 3));

        ArrayList<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add(null);
        // 将list/数组,拼接成逗号 或其他指定的字符 分隔为字符串
        // 也可以 推荐 如果elements数组为null或者元素个数为0，则返回空字符串
        // StrUtil.concat(false, , ) 为 false时，null会被完全忽略跳过
        System.out.println(StrUtil.concat(false, null,"11", null));
        System.out.println(StrUtil.join(StrUtil.COMMA, list));

        List<User> userList = Arrays.asList(new User(1L, "张三"), new User(2L, "李四"));
        String collect = userList.stream().map(User::getName).collect(Collectors.joining(StrUtil.COMMA));
        System.out.println(collect);

        // 忽略大小写比较相等
        System.out.println(StrUtil.equalsIgnoreCase(null, "Wo1"));

    }

}
